package creational_pattern.singleton.demo1;

import java.io.Serial;
import java.io.Serializable;

/**
 * 懒汉模式
 *      静态内部类实现
 *      测试序列化反序列化破坏单例
 *      并通过readResolve方法解决
 */
public class Singleton implements Serializable {
    // 私有化构造方法
    private Singleton() {}

    // 静态内部类
    private static class SingletonHolder {
        // 在内部类中声明并初始化
        private static final Singleton instance = new Singleton();
    }

    // 提供公共的方法
    public static Singleton getInstance() {
        return SingletonHolder.instance;
    }

    // 反序列化时会通过反射自动调用，将该方法的返回值直接返回
    @Serial
    public Object readResolve() {
        return SingletonHolder.instance;
    }
}

